package lp2.projeto.agenda;

import java.awt.*;
import java.awt.event.*;
import java.io.IOException;

import javax.swing.*;

import lp2.projeto.database.Database;
import lp2.projeto.anotacao.Anotacao;

/**
 * Modifica e visualiza os sons de uma determinada anotacao
 */
public class SomJDialog extends JDialog {
	private Anotacao anotacao;
	private SomJPanel somJPanel;
	private JComboBox listaSom;
	private JTextField campoURL;
	
	/**
	 * Construtor de SomJDialog
	 * @param anotacao Anotacao cujos sons o dialogo ira tocar
	 */
	public SomJDialog(Anotacao anotacao) {
		setLayout(new GridBagLayout());
		
		GridBagConstraints constraints = new GridBagConstraints();
		constraints.gridwidth = 3;
		constraints.fill = GridBagConstraints.HORIZONTAL;
		
		add(new JLabel("Sons da anotacao"), constraints);
		
		somJPanel = new SomJPanel();
		constraints.gridy = 1;
		add(somJPanel, constraints);
		
		listaSom = new JComboBox();
		listaSom.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				somJPanel.setSom((Som)listaSom.getSelectedItem());
			}
		});
		constraints.gridy = 2;
		constraints.gridwidth = 2;
		add(listaSom, constraints);
		
		JButton botaoRemover = new JButton("Remover");
		botaoRemover.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				remover();	
			}
		});
		constraints.gridwidth = 1;
		constraints.gridx = 2;
		add(botaoRemover, constraints);
		
		JButton botaoAdicionar = new JButton("Adicionar");
		botaoAdicionar.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				adicionar();	
			}
		});
		constraints.gridy = 3;
		constraints.gridx = 0;
		add(botaoAdicionar, constraints);
		
		campoURL = new JTextField("Insira a URL do som");
		constraints.gridx = 1;
		constraints.weightx = 1.0;
		add(campoURL, constraints);
		
		JButton botaoVoltar = new JButton("Voltar");
		botaoVoltar.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				voltar();	
			}
		});
		constraints.gridx = 2;
		add(botaoVoltar, constraints);
		
		setSize(500, 130);
		setResizable(false);
		setModal(true);
		
		setAnotacao(anotacao);
	}
	
	private void remover() {
		Som som = (Som)listaSom.getSelectedItem();
		if (som != null) {
			listaSom.removeItem(som);
			anotacao.getSons().remove(som); //TODO: Deixar mais elegante
			somJPanel.setSom(null);
		}
	}
	
	private void adicionar() {
		String url = campoURL.getText();
		
		try {
			byte[] arquivo = Database.lerArquivo(url);
			Som som = new Som(url, arquivo);
			anotacao.getSons().add(som); //TODO: Deixar mais elegante
			listaSom.addItem(som);
			
			campoURL.setText("Insira a URL do som");
			
			listaSom.setSelectedItem(som);
			somJPanel.setSom(som);
		} catch (IOException ioe) {
			avisoJDialog aviso = new avisoJDialog("Arquivo invalido");
			aviso.setVisible(true);
		}
	}
	
	private void voltar() {
		dispose();
	}
	
	private void setAnotacao(Anotacao anotacao) {
		this.anotacao = anotacao;
		
		somJPanel.setSom(null);
		listaSom.removeAllItems();
		for (Som som : anotacao.getSons())
			listaSom.addItem(som);
	}
}
